package com.linjiang.design.templatemethod;

//模板方法模式
//定义一个操作的算法骨架，而将一些步骤延迟到子类中，使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
public class TemplateMethodTest {

    public static void main(String[] args) {
        AbstractClass abstractClass = new SubClass();
        abstractClass.operation();
    }
}


abstract class AbstractClass{

    //定义一个操作的算法骨架
    public void operation(){
        // open
        System.out.println("pre ...");
        System.out.println("step1 ...");
        System.out.println("step2 ...");

        //调用模板方法
        templateMethod();
    };

    //留给子类的扩展点
    abstract protected void templateMethod();
}

class SubClass extends AbstractClass{

    @Override
    protected void templateMethod() {
        System.out.println("执行子类扩展方法");
    }
}